Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Commit 3d0f9b35add7c4cad85af365a4c464191aee943c


Parents : c4dd30c
Author : Ivan <ivan@quad4.io>
Signature : Signature validation error
Date : 2026-04-19T11:38:03-05:00

chore(changelog): update changelog

Changes

1 files changed, 6 insertions(+), 2 deletions(-)

M CHANGELOG.md +6 -2

Diff

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0b548329..29ff4587 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -19,8 +19,8 @@ All notable changes to this project will be documented in this file.
- **Better Reliability**: The desktop (Electron) app recovers better from connection problems and crashes, making it more robust.
- **Android App!**: MeshChatX now has a native Android app you can install (not just for Termux users).
- **More Languages**: Spanish, French, Dutch, and Chinese options were added to the app’s language selector.
-- **Extension Support (Early Preview)**: There are new documents and tools for developers who want to create plug-ins or external integrations with MeshChatX.
- **Message Size Limits**: You can now set how big incoming messages can be (from 1MB up to 1GB) with easy presets or custom values. The server will now accept transfers up to 1GB in size.
+- **Interface Options**: The Add Interface page now exposes the full set of options the Reticulum stack supports. Auto Interface gets group ID, discovery scope, discovery and data ports, multicast type, allowed/ignored devices, and a configured bitrate; TCP/UDP/Backbone gain device, prefer IPv6, KISS framing, I2P tunneling, connect timeout, max reconnect tries, and fixed MTU; RNode/KISS/AX.25 KISS surface flow control, station ID callsign, ID interval, baud rate, data bits, parity, stop bits, preamble, TX tail, persistence, slot time, and SSID; I2P exposes a connectable toggle. If a configured listen, discovery, or data port is already taken by another process, the save now fails with a clear "port already in use" message instead of silently producing an interface that won't come up.
### Platform and backend
@@ -44,6 +44,8 @@ All notable changes to this project will be documented in this file.
- **Media hardening**: Backend and frontend tests for **GIF**, sticker, and Lottie paths (**fuzzing**, HTTP media routes, size/type checks).
- **LXMF send path**: Clearer handling and diagnostics when **message sending** fails (timeouts, path errors); tests cover failure modes.
- **Interfaces API**: Discovery responses include **IFAC** fields where the stack provides them; tests for discovery behaviour.
+- **Interfaces API (full options)**: **`POST /api/v1/reticulum/interfaces/add`** now accepts the full RNS option matrix per interface type. **AutoInterface** persists **`group_id`**, **`discovery_scope`** (validated against `link`/`admin`/`site`/`organisation`/`global`), **`discovery_port`**, **`data_port`**, **`multicast_address_type`** (`temporary`/`permanent`), **`devices`**, **`ignored_devices`**, and **`configured_bitrate`**. **TCPClientInterface** gains **`connect_timeout`**, **`max_reconnect_tries`**, and **`fixed_mtu`** alongside existing **`kiss_framing`**/**`i2p_tunneled`**. **TCPServerInterface** adds **`i2p_tunneled`**. **BackboneInterface** now supports a **listener mode** (**`listen_ip`**/**`listen_port`**/**`device`**/**`prefer_ipv6`**) in addition to the existing connector mode. **RNodeInterface** persists **`flow_control`** and **`id_callsign`**. **KISSInterface**/**`AX25KISSInterface`** persist **`flow_control`**, **`id_callsign`**, and **`id_interval`** in addition to the existing serial/framing knobs. **I2PInterface** exposes the **`connectable`** flag.
+- **Interfaces port-in-use validation**: New **`meshchatx/src/backend/interface_port_check.py`** module probes the requested host/port before the configuration is written. **TCPServerInterface** and **BackboneInterface** (listener mode) listen-port collisions, **UDPInterface** listen-port collisions, and **AutoInterface** **`discovery_port`**/**`data_port`** collisions return **HTTP 409** with a translated message (host, port, and conflicting interface name) so the operator can pick a free port instead of restarting into a broken interface.
### Frontend and UX
@@ -56,11 +58,12 @@ All notable changes to this project will be documented in this file.
- **Message list performance**: **`@tanstack/vue-virtual`**-based virtualization, image group display, and shared scroll utilities for long threads.
- **Links and Markdown**: **`link-utils`** hardening (anchor protection, trailing punctuation); **Markdown** fixes for underscores in links vs italics with expanded tests.
- **Modularity (settings and messages)**: Config fetch/merge, **`PATCH /api/v1/config`**, color normalization, transport enable/disable, maintenance HTTP calls, and visualiser **`localStorage`** prefs live in **`meshchatx/src/frontend/js/settings/`** (`settingsConfigService`, `settingsTransportService`, `settingsMaintenanceClient`, `settingsVisualiserPrefs`); **`SettingsPage`** delegates to those modules. Message renderability, telemetry-only detection, image-only detection, and drag/paste image extraction are in **`conversationMessageHelpers.js`** with thin **`ConversationViewer`** wrappers.
-- **Shell and settings UI**: Emergency and WebSocket status banners extracted to **`AppShellBanners.vue`**; conversation peer chrome to **`ConversationPeerHeader.vue`**; reusable **`SettingsSectionBlock.vue`** (used for the stranger-protection section). **`frontendModuleMap.js`** summarizes main frontend layers and hotspots for contributors.
+- **Shell and settings UI**: Emergency and WebSocket status banners extracted to **`AppShellBanners.vue`**; conversation peer chrome to **`ConversationPeerHeader.vue`**; reusable **`SettingsSectionBlock.vue`** (used for the stranger-protection section).
- **Pages polish**: **About**, **Call**, **Debug logs**, and **Settings** pages with clearer layout, app info, environment paths, log copy-to-clipboard, and error handling; related tests.
- **ConversationViewer**: File input clears after selection and improves image-type detection for uploads; **GIF** picker and drag/drop upload to the GIF library; animated stickers and GIFs can use **`InViewAnimatedImg`** so heavy animations run only when visible.
- **Stickers UI**: **`StickerPacksManager`**, **`StickerEditor`**, **`StickerView`**, and **`tgsDecode`** (`.tgs` / Lottie JSON) integrate with the composer and identities settings.
- **Tools**: **`ReticulumConfigEditorPage`** for editing Reticulum configuration from the app with validation feedback.
+- **Add Interface page (full options)**: **`AddInterfacePage.vue`** renders type-specific sections for every option the backend now accepts. **AutoInterface** has a dedicated form (**Group ID**, **Discovery Scope**, **Multicast Address Type**, **Discovery Port**, **Data Port**, allowed and ignored devices, configured bitrate). **TCP Client** exposes **KISS framing**, **I2P tunneled**, **connect timeout**, **max reconnect tries**, and **fixed MTU** toggles/fields. **TCP Server** / **UDP** add **device** and **prefer IPv6** controls; **TCP Server** also exposes **I2P tunneled**. **BackboneInterface** has a **Listener mode** toggle that swaps between connector (remote/target/transport identity) and listener (listen IP/port/device/prefer IPv6) layouts. **RNode** sections add **spreading factor**, **coding rate**, **flow control**, **ID callsign**, **ID interval**, and **airtime limit long/short**. **Serial**/**KISS**/**AX.25 KISS** sections expose **baud rate**, **data bits**, **parity**, **stop bits**, **preamble**, **TX tail**, **persistence**, **slot time**, **flow control**, **beacon callsign/interval**, and **AX.25 callsign/SSID**. **I2P** gains a **connectable** toggle. Every new field round-trips through **`saveInterface`**, **`loadInterfaceToEdit`**, **`applyConfig`**, and **`buildPayloadFromImportedConfig`** so editing and quick-import flows keep parity with the form.
- **Network visualiser**: Chunk and icon rendering tuned for large node sets (see TL;DR).
### CI and packaging
@@ -85,6 +88,7 @@ All notable changes to this project will be documented in this file.
- **GIFs and stickers**: Backend tests **`test_gif_utils`**, **`test_gifs_dao`**, **`test_sticker_pack_utils`**, **`test_sticker_packs_dao`**; frontend **`Gifs.test.js`**, **`StickerView.test.js`**, **`InViewAnimatedImg.test.js`**, **`tgsDecode.test.js`**, **`inViewObserver.test.js`**, **`mediaLottieStickerGifs.fuzzing.test.js`**.
- **Reticulum config editor**: **`test_reticulum_config_editor.py`** (backend), **`ReticulumConfigEditorPage.test.js`** (frontend).
- **Interfaces**: **`test_interface_discovery_ifac.py`**, **`InterfacesDiscoveryIfac.test.js`**.
+- **Interfaces (port-in-use and full options)**: **`tests/backend/test_interface_port_check.py`** covers the new socket probe (free port, busy TCP port, busy UDP port, invalid input, wildcard host, unresolvable host, conflict-message formatting). **`tests/backend/test_interface_options.py`** drives **`/api/v1/reticulum/interfaces/add`** for **AutoInterface** (full options + invalid `discovery_scope`/`multicast_address_type` + busy `data_port` returning 409), **TCPClient** (advanced options), **TCPServer** (optional options + busy listen-port 409), **UDP** (busy listen-port 409), **BackboneInterface** (listener-mode persistence + connector mode still requiring remote), **RNode** (flow control / ID callsign / airtime limits), **KISS** (full serial + framing + beacon options), **AX.25 KISS** (callsign/SSID), and **I2P** (`connectable=False`). **`tests/frontend/AddInterfaceOptions.test.js`** asserts each new field is sent through **`window.api.post('/api/v1/reticulum/interfaces/add', ...)`** and that backend **HTTP 409** "port already in use" responses are surfaced via **`ToastUtils.error`**.
- **Messaging**: **`test_message_sending_failures.py`**, **`MessageSendingFailures.test.js`**; **`CJKTextOverflow.test.js`** for composer/thread overflow.
- **Media API**: **`test_media_http_api.py`**, **`test_media_fuzzing.py`**, shared **`media_test_assets.py`** fixtures.


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────